
class ContatoController {

    String controlador;

    def index = { }

    /*
     * Closure que grava o registro.
     */
    def save   = {
        if(!verificaLogon()){
            return;
        }
        // Pega o controlador de origem.
        controlador = params.tipo;
        // Carrega os atributos e recebe os dados.
        def contatoInstance = new Contato(params);
        // Grava os dados e redireciona para a tela de origem.
        if (contatoInstance.save(flush: true)) {
            flash.message = "Contato cadastrado com sucesso.";
            redirect(controller: controlador, action: "edit", id:params.pessoa.id);
        }else {
            flash.message = "Não foi possível cadastrar o contato.";
            redirect(controller: controlador, action: "edit", id:params.pessoa.id, model: [contatoInstance: contatoInstance]);
        }
    };

    /*
     * Closure que grava as alterações no registro.
     */
    def update   = {
        if(!verificaLogon()){
            return;
        }
        // Pega o controlador de origem.
        controlador = params.tipo;
        // Carrega os atributos e recebe os dados.
        def contatoInstance = Contato.get(params.id);
        contatoInstance.properties = params;
        // Grava os dados e redireciona para a tela de origem.
        if (contatoInstance.save(flush: true)) {
            flash.message = "Contato alterado com sucesso.";
            redirect(controller: controlador, action: "edit", id:params.pessoa.id);
        }else {
            flash.message = "Não foi possível alterar o contato.";
            redirect(controller: controlador, action: "edit", id:params.pessoa.id, model: [contatoInstance: contatoInstance]);
        }
    };

    /*
     * Closure que carrega os dados para alteração do registro.
     */
    def edit   = {
        if(!verificaLogon()){
            return;
        }
        // Pega o controlador de origem.
        controlador = params.tipo;
        def contatoInstance = Contato.findById(params.id);
        // Se o contato existe retorna os dados para tela de origem.
        if (contatoInstance){
            redirect(controller: controlador, action: "edit", id:params.pessoa.id, params:[contato: contatoInstance]);
        }else{
            flash.message = "Contato não encontrado.";
            redirect(controller: controlador, action: "edit", id:params.pessoa.id);
        }
    };

    /*
     * Closure que exclui os registro.
     */
    def delete = {
        if(!verificaLogon()){
            return;
        }
        // Pega o controlador de origem.
        controlador = params.tipo;
        // Carrega os dados.
        def ContetoInstance = Contato.findById(params.id)
        // Exclui o registro.
        def pessoaInstance = Pessoa.findById(ContetoInstance.pessoa.id)
        
        ContetoInstance.delete();
        flash.message = "Contato excluido com sucesso.";
        redirect(controller: controlador, action: "edit", id:pessoaInstance.id);
    };

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}
